package br.feevale.ihc

import org.hibernate.FetchMode
import org.joda.time.LocalDateTime

import br.com.insoft4.ext.rest.AbstractCrudService
import br.com.insoft4.extjs.rest.AbstractCrudController
import br.com.insoft4.insoftextui.export.CSVFileHelperIntf
import br.com.insoft4.json.utils.JsonUtils

class MarcacaoController extends AbstractCrudController<Marcacao> {
	
	MarcacaoService marcacaoService
	def csvFileHelper
	
	@Override
	protected AbstractCrudService<Marcacao> getCrudService() {
		return marcacaoService
	}

	@Override
	protected CSVFileHelperIntf getCsvHelper() {
		return csvFileHelper
	}
	
	@Override
	protected Closure getDefaultWhere() {
		return {
			fetchMode("atividadeColaborador", FetchMode.JOIN)
			fetchMode("atividadeColaborador.colaborador", FetchMode.JOIN)
			fetchMode("atividadeColaborador.atividade", FetchMode.JOIN)
			fetchMode("atividadeColaborador.atividade.projeto", FetchMode.JOIN)
		}
	}
	
	def iniciar() {
		def ret = [:]
		
		AtividadeColaborador atividadeColaborador = AtividadeColaborador.get(params.idAtividade)
		
		if (atividadeColaborador) {
			Marcacao marcacao = new Marcacao()
			marcacao.inicio = new LocalDateTime()
			marcacao.atividadeColaborador = atividadeColaborador
			marcacao.save(flush: true)
			
			ret.success = true;
		} else {
			ret.success = false;
		}
		
		render contentType: 'text/plain', text: JsonUtils.toJson(ret)
	}

	def finalizar() {
		def ret = [:]
		
		AtividadeColaborador atividadeColaborador = AtividadeColaborador.get(params.idAtividade)
		
		if (atividadeColaborador) {
			Marcacao marcacao = Marcacao.createCriteria().get() {
				eq("atividadeColaborador", atividadeColaborador)
				isNull("fim")
			}
			
			marcacao.fim = new LocalDateTime()
			marcacao.save(flush: true)
			
			ret.success = true;
		} else {
			ret.success = false;
		}
		
		render contentType: 'text/plain', text: JsonUtils.toJson(ret)
	}
	
	def atividadeIniciada() {
		def ret = [:]
		
		AtividadeColaborador atividadeColaborador = AtividadeColaborador.get(params.idAtividade)
		
		if (atividadeColaborador) {
			List<Marcacao> marcacoes = Marcacao.createCriteria().list() {
				eq("atividadeColaborador", atividadeColaborador)
				isNotNull("inicio")
				isNull("fim")
			}
			
			ret.success = true;
			ret.size = marcacoes.size()
		} else {
			ret.success = false;
		}
		
		render contentType: 'text/plain', text: JsonUtils.toJson(ret)
	}
	
	def gen() {
		String codPrograma = "IHC004"
		String namespace = "IHC"
		String sufix = "Marcacao"
		String dir = "E:/grails/projetos/feevale/ihc-analise-produtividade/web-app/app/app/"

		StringBuilder content = new StringBuilder()

		def domainClass = grailsApplication.getDomainClass(AtividadeColaborador.class.name)

		content << gen.model(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, sufix: sufix)
		content << gen.store(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, sufix: sufix)
		content << gen.gridView(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, sufix: sufix)
		content << gen.formView(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, sufix: sufix)
		content << gen.listController(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, sufix: sufix)
		content << gen.formController(programa: codPrograma, domainClass: domainClass, extNamespace: namespace, sufix: sufix)

		render text: content.toString(), contentType: 'text/plain'
	}
}
